//package com.cloud.lan.config.filter;
//
//import org.apache.commons.io.IOUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.MediaType;
//
//import java.io.ByteArrayInputStream;
//import java.io.IOException;
//import java.util.LinkedHashMap;
//import java.util.Map;
//
//import javax.servlet.ReadListener;
//import javax.servlet.ServletInputStream;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletRequestWrapper;
//
///**
// * 包装流 解决流只能消费一次问题
// *
// * @author qing.wang.o
// */
//public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
//    //没被包装过的HttpServletRequest（特殊场景，需要自己过滤）
//    HttpServletRequest orgRequest;
//    /**
//     * 保存内容
//     */
//    private String body;
//
//    private ServletInputStream inputStream;
//
//    public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
//        super(request);
//        orgRequest = request;
//        //非json类型，直接返回
//        if (!MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(super.getHeader(HttpHeaders.CONTENT_TYPE))) {
//            this.inputStream = super.getInputStream();
//        }
//        //保存流
//        body = IOUtils.toString(super.getInputStream(), "utf-8");
//        //为空，直接返回
//        if (StringUtils.isBlank(body)) {
//            this.inputStream = super.getInputStream();
//        }
//        ByteArrayInputStream bis = new ByteArrayInputStream(body.getBytes("utf-8"));
//        inputStream = new ServletInputStream() {
//            @Override
//            public boolean isFinished() {
//                return true;
//            }
//
//            @Override
//            public boolean isReady() {
//                return true;
//            }
//
//            @Override
//            public void setReadListener(ReadListener readListener) {
//
//            }
//
//            @Override
//            public int read() throws IOException {
//                return bis.read();
//            }
//        };
//    }
//
//    @Override
//    public ServletInputStream getInputStream() throws IOException {
//        if (inputStream != null) {
//            return inputStream;
//        }
//        return super.getInputStream();
//    }
//
//    @Override
//    public String getParameter(String name) {
//        String value = super.getParameter(name);
//        return value;
//    }
//
//    @Override
//    public String[] getParameterValues(String name) {
//        String[] parameters = super.getParameterValues(name);
//        if (parameters == null || parameters.length == 0) {
//            return null;
//        }
//        return parameters;
//    }
//
//    @Override
//    public Map<String, String[]> getParameterMap() {
//        Map<String, String[]> map = new LinkedHashMap<>();
//        Map<String, String[]> parameters = super.getParameterMap();
//        for (String key : parameters.keySet()) {
//            String[] values = parameters.get(key);
//            map.put(key, values);
//        }
//        return map;
//    }
//
//    @Override
//    public String getHeader(String name) {
//        String value = super.getHeader(name);
//        return value;
//    }
//
//
//    /**
//     * 获取最原始的request
//     */
//    public HttpServletRequest getOrgRequest() {
//        return orgRequest;
//    }
//
//    /**
//     * 获取最原始的request
//     */
//    public static HttpServletRequest getOrgRequest(HttpServletRequest request) {
//        if (request instanceof BodyReaderHttpServletRequestWrapper) {
//            return ((BodyReaderHttpServletRequestWrapper) request).getOrgRequest();
//        }
//
//        return request;
//    }
//
//
//    public String getBody() {
//        return body;
//    }
//
//}
